Software licensing is an important component to a software product suite produced by a software development company. When the primary products from a company are software only, enforcement of licenses to execute the software is an important method of maintaining revenue from customers. Many software products today have some type of activation key or sequence that enables legitimate purchasers of the software to install and use the software.
With some software packages, once an authorization code or key has been entered, the software may be run on any computer. Some of these packages come with a software license agreement that states that the software package may only be executed on one computer. Multiple installations of the software are a violation of the software license agreement. One method of tracking the unauthorized usage is to register the product with the vendor, though this may not provide the information necessary to locate unlicensed copies. Likewise, a customer may purchase a site license, which does entitle them to install the software on multiple computers.
An alternate approach is to tie the software license for an application to a particular piece of hardware. This may be accomplished by associating a unique hardware identification, traditionally associated with the network hardware, with the software to limit the execution to a single system. In many cases, the configuration allows for multiple executions of the software package on the identified system. Typically this configuration is only limited by the amount of resources available to additional executions of the application. Based on resources alone, there will be a limit to the number of simultaneous executions on a particular system. Adding an additional execution of the application that competes for resources with other executions ultimately slows down all executions, thus reducing overall throughput. Larger computer systems with more resources will typically allow for additional simultaneous executions of the application.
Other license implementations allow for floating licenses where the number of executions of a software application are limited by the license. With a floating license, the executions of the application are no longer tied to a specific machine. Generally in these configurations, a license manager that controls the distribution of licenses is tied to and executes on one machine in a network. Other computers communicate with the license manager over the network to check out and return licenses associated with the software applications.
In addition to licensing the overall application, software development companies may also license individual functionalities or features of a particular software application. For example, an application may require a software license to execute on a system in a single processor mode. If a user of the application wanted to get faster throughput, he or she may pay the software development company additional money that would provide them with an additional license to be used in conjunction with the application license to enable parallel processing by the application. These additional feature licenses for software applications may provide for additional revenue streams for application producers.
Software licensing may also be a challenging area for software development organizations as it juxtaposes business desires to obtain maximum revenue from a product against a customer's desire to reduce software expense. While there are many ways to implement software licensing, it is generally decomposed into a measurement problem, collecting data to compare against the license key to know whether the license is in or out of compliance, a reporting problem, informing the application or user of a license compliance state, and a license enforcement problem, taking explicit action in “out of compliance” situations.
The measurement problems are generally well known in today's industry. Key data items may include items such as system serial number, number of physical processors in a system (traditionally measured in integer increments), number of logical processors in a system configured for a logically partitioned computing environment (which may be measured in fractional or whole units), and/or quantity of memory. These data values may dictate the granularity of licenses, which may be sold and potentially enforced. Logically partitioned environments provide a unique challenge to software developers who use the system identification for licensing. In the logically partitioned environment, each of the logical or virtual machines share the same physical hardware resources, potentially having the same license attributes such as system serial number and number of processors from a licensing standpoint. Because this configuration allows each machine to operate as an individual, stand-alone machine, multiple copies of a software application, intended to be licensed on a single machine, may now be executed simultaneously.
Likewise, problems with reporting are well understood by those of ordinary skill in the art. The problems relate to the best way to present the licensing information to a user of an application. In a typical situation, licensing should be invisible to the user of an application. Only when an occurrence of application or system function being out of compliance with a license should the user or other administrator be informed or have to take action. For example, a general design point for reporting may be based on messaging designed with subsequent actions potentially triggered by the messages. The message may be posted to a log file by the license manager when a license is out of compliance. Daemons, executing on the system, may be configured to monitor the log file and to send an e-mail or other indicator to a system operator when such a message is received. This may allow the administrator to take proactive action to correct the situation.
Another area for improvement in this space relates to a third area of license enforcement. Common actions taken today generally have a high impact when licenses are out of compliance and automatic enforcement is performed. Severe actions may include denial of service by preventing execution of the whole application or degradation of system performance such that all applications running on the system are negatively impacted. While these actions may seem reasonable in the cases of intentional license misuse, they are a significant inconvenience to a customer who has made an honest mistake. For example, a customer who has purchased a software license for four processors' worth of database access may be fine while running it on a logically partitioned system with four processors in their partition. But if the system administrator temporarily brings an additional two processors to this partition to fix a performance problem in a different application, he or she may be accidentally forcing the database license out of compliance. If this license has automatic enforcement of a severe nature, the database application may terminate against the wishes of the customer who thought they were in compliance with the license. Software vendors who allow for automatic enforcement of licenses may have to address the impact on customer satisfaction.